# -*- coding: utf-8 -*-
"""
    # @Author : xiaowei
    # @Time : 2022/7/13 20:39
    # @Software: PyCharm
"""
# 练习1
# 使用reduce, 取出全数字===》》12349
lst = ['a', '1', '2bb', '234', '', '9']
from functools import reduce


def func(x, y):
    return x * 10 ** int(len(str(y))) + y


result = map(int, filter(lambda x: x.isdigit() and str(x).strip(), lst))
print(reduce(func, list(result)))

# 练习2
# 有以下列表：Ist1=[7,-8,5,4,0,-2,-5]
# 正数在前负数在后 整数从小到大 负数从大到小
list1 = [7, -8, 5, 4, 0, -2, -5]
print(sorted(list1, key=lambda x: (x < 0, abs(x))))

# 练习3
# 这是一个字符串排序，排序规则：小写<大写<奇数<偶数 ·s='asdf234GDSdsf23'
# 排序：小写-大写-奇数-偶数
# 原理：先比较元组的第一个值，FALSE

s = 'asdf234GDSdsf23'


def str_sort(s):
    for item in s:
        if item.isdigit():
            if int(item) % 2:
                return True, False, item
            else:
                return True, True, item
        else:
            if item.isupper():
                return False, True, item
            else:
                return False, False, item

print(''.join(sorted(s,key=str_sort)))